global aux = "auxiliary files"

use "Customs_raw.dta", clear
rename Año AÃ±o
drop CIIU3_3D 

joinby ID_PRODUCTO using "ID_CPC1.0_5D_3D.dta" ,unmatched(both) update _merge(merge)   /* This is a confidential file mapping fake 5-digit product codes into fake 3-digit product codes */

tab merge

keep if merge==3
drop merge
* "Concordance: Country of origin/destination Aduana code to 3-digit ISO country code"
joinby Pais_Destino_Cod using "isocode_aduanas.dta", unmatched(master) update _merge(merge)
drop merge
drop if Pais_Destino_Cod>=900
drop if FOBUS==0

**** merge with nominal exchange rate
joinby AÃ±o using "TCN_USD_CLP_yearly_2002_2009.dta", unmatched(master) _merge(merge) update
tab merge
drop merge

generate FOB_clp=(FOBUS*tcn_usd_clp)/1000


**** transform unit measures
replace Cantidad_Mercancia=Cantidad_Mercancia*1000 if Unidad_Medida==4 /* Net Ton. to Net Kilogram */
replace Unidad_Medida=6 if Unidad_Medida==4
replace Cantidad_Mercancia=Cantidad_Mercancia/1000 if Unidad_Medida==7 /* Net Gr. to Net Kilogram */
replace Unidad_Medida=6 if Unidad_Medida==7
replace Cantidad_Mercancia=Cantidad_Mercancia*100 if Unidad_Medida==8 /* Hectoliter to Liter */
replace Unidad_Medida=9 if Unidad_Medida==8
replace Cantidad_Mercancia=Cantidad_Mercancia*1000 if Unidad_Medida==16 /* Cubic metre to Liter */
replace Unidad_Medida=9 if Unidad_Medida==16
replace Cantidad_Mercancia=Cantidad_Mercancia*1000 if Unidad_Medida==13 /* Thousand to Unit */
replace Unidad_Medida=10 if Unidad_Medida==13
replace Cantidad_Mercancia=. if Unidad_Medida==0 /* without unit */

rename AÃ±o AÃ‘O

joinby ID_FIRMA AÃ‘O using "ENIA_F1_CIIU_by_Sales_Criterion.dta", unmatched(both) _merge(merge) update

rename AÃ‘O AÃ±o
tab merge
keep if merge==3
drop merge

tostring Unidad_Medida, replace
rename Unidad_Medida unidad_medida_ijt

 levelsof isocode, local(country_code) clean
	foreach y of local country_code {
	generate fob_x_ijtu_`y'=FOB_clp if isocode=="`y'"
	label variable fob_x_ijtu_`y' "FOB (Thousands $) of Exports to `y' (Customs office)"
	generate q_fob_x_ijtu_`y'=Cantidad_Mercancia if isocode=="`y'"
	label variable q_fob_x_ijtu_`y' "Quantity of Exports to `y' (Customs office)"
	}

*** collapse by cpc 5 digits
collapse (firstnm) CIIU3_3D N_ID_PRODUCTO (sum) fob_x_ijtu_* q_fob_x_ijtu_* FOB_clp ///
 Cantidad_Mercancia, by(ID_FIRMA AÃ±o ID_PRODUCTO unidad_medida_ijt) fast
save "Aduana_Exports_pre_representative.dta", replace


*************** calculate equivalent units **************************************************************
*Use ENIA to compute representative unit
use "ENIA_F3_pre_representative.dta"

egen f3_valor_ventas_ijt=total(f3_valor_ventas), by(ID_PRODUCTO f3_unidad AÃ‘O)
collapse (sum) f3_valor_ventas, by(N_ID_PRODUCTO ID_PRODUCTO f3_unidad AÃ‘O)

preserve
levelsof AÃ‘O, local(year_code)
reshape wide f3_valor_ventas, i(N_ID_PRODUCTO ID_PRODUCTO f3_unidad) j(AÃ‘O)
sort ID_PRODUCTO f3_unidad

foreach y of local year_code {
	egen tot_f3_valor_ventas`y'=total(f3_valor_ventas`y'), by(N_ID_PRODUCTO) missing
}

egen count_miss_ij =rowmiss(f3_valor_ventas*)
egen count_miss_i =rowmiss(tot_f3_valor_ventas*)

gen count_miss = count_miss_ij ~= count_miss_i & count_miss_ij ~= 0
keep ID_PRODUCTO f3_unidad count_miss
tempfile temp1
save `temp1'
restore

joinby ID_PRODUCTO f3_unidad using `temp1', unmatched(none) update _merge(merge)

replace f3_valor_ventas = . if count_miss == 1
egen f3_valor_ventas_jt=total(f3_valor_ventas), by(N_ID_PRODUCTO AÃ‘O)
egen f3_valor_ventas_ijt=total(f3_valor_ventas), by(ID_PRODUCTO f3_unidad AÃ‘O)

generate sh_f3_valor_ventas_ijt=100*(f3_valor_ventas_ijt/f3_valor_ventas_jt)
egen mean_sh_f3_valor_ventas_ijt =mean(sh_f3_valor_ventas_ijt), by(ID_PRODUCTO f3_unidad)
egen max_mean_sh_f3_valor_ventas_jt = max(mean_sh_f3_valor_ventas_ijt), by(N_ID_PRODUCTO)
gen flag = 1 if max_mean_sh_f3_valor_ventas_jt == mean_sh_f3_valor_ventas_ijt

collapse max_mean_sh sh count_miss, by(N_ID_PRODUCTO ID_PRODUCTO f3_unidad flag)
sort N_ID_PRODUCT ID_PRODUCTO f3_unidad
order N_ID_PRODUCT ID_PRODUCTO f3_unidad flag

replace f3_unidad="0" if f3_unidad=="s/u"
replace f3_unidad="doz" if f3_unidad=="doc"
replace f3_unidad="14" if f3_unidad=="m"
replace f3_unidad="15" if f3_unidad=="m2"
replace f3_unidad="17" if f3_unidad=="par"
replace f3_unidad="bdmt" if f3_unidad=="bdmt"
replace f3_unidad="6" if f3_unidad=="kgr"
replace f3_unidad="9" if f3_unidad=="litre"
replace f3_unidad="10" if f3_unidad=="unit"

rename ID_PRODUCTO f3_equiv_cpc5_pr_jt
rename f3_unidad f3_equiv_m_unit_ijt
replace f3_equiv_cpc5_pr_jt =. if count_miss == 1
replace f3_equiv_m_unit_ijt = "Invalid" if count_miss == 1

keep if flag == 1
collapse flag, by(N_ID_PRODUCTO f3_equiv_cpc5_pr_jt f3_equiv_m_unit_ijt)
drop flag
replace f3_equiv_cpc5_pr_jt =. if f3_equiv_m_unit_ijt == "0"
replace f3_equiv_m_unit_ijt = "Invalid" if f3_equiv_m_unit_ijt == "0"

save "ENIA_F3_CPC5_repres_units_collapse_year.dta", replace

use "Aduana_Exports_pre_representative.dta", clear

joinby N_ID_PRODUCTO using "ENIA_F3_CPC5_repres_units_collapse_year.dta", ///
unmatched(master) _merge(merge) update
drop merge

egen aux_f3_equiv_m_unit_ijt=mode(f3_equiv_m_unit_ijt), by(N_ID_PRODUCTO)
replace f3_equiv_m_unit_ijt=aux_f3_equiv_m_unit_ijt
drop aux_f3_equiv_m_unit_ijt
egen aux_f3_equiv_cpc5_pr=mean(f3_equiv_cpc5_pr_jt), by(N_ID_PRODUCTO)
replace f3_equiv_cpc5_pr_jt=aux_f3_equiv_cpc5_pr
drop aux_f3_equiv_cpc5_pr

replace f3_equiv_m_unit_ijt="Invalid" if f3_equiv_m_unit_ijt==""
replace f3_equiv_cpc5_pr_jt=. if f3_equiv_m_unit_ijt=="Invalid"

save "Aduana_Exports_pre_representative_v2.dta", replace

use "Aduana_Exports_pre_representative_v2.dta", clear
egen FOB_clp_jtu=total(FOB_clp) if ID_PRODUCTO==f3_equiv_cpc5_pr_jt , by(ID_PRODUCTO AÃ±o unidad_medida_ijt)
egen FOB_clp_t=total(FOB_clp), by(N_ID_PRODUCTO AÃ±o)

collapse (firstnm) N_ID_PRODUCTO (mean) FOB_clp_jtu FOB_clp_t, by(ID_PRODUCTO AÃ±o unidad_medida_ijt)
keep if FOB_clp_jtu>0 & !missing(FOB_clp_jtu)
save "Aduana_Exports_exp_CPC5_unit_by_CPC3_v2.dta", replace

use "Aduana_Exports_exp_CPC5_unit_by_CPC3_v2.dta", clear
collapse (firstnm) N_ID_PRODUCTO (count) count_FOB_clp_jtu=FOB_clp_jtu, by(ID_PRODUCTO unidad_medida_ijt)
gsort N_ID_PRODUCTO -count_FOB_clp_jtu
save "Aduana_Exports_count_exp_CPC5_unit_by_CPC3_v2.dta", replace

use "Aduana_Exports_exp_CPC5_unit_by_CPC3_v2.dta", clear
joinby N_ID_PRODUCTO ID_PRODUCTO unidad_medida_ijt using ///
"Aduana_Exports_count_exp_CPC5_unit_by_CPC3_v2.dta", unmatched(master) ///
 _merge(merge) update
 
generate sh_FOB_clp_jt=100*(FOB_clp_jtu/FOB_clp_t)
egen mean_sh_FOB_clp_jt=mean(sh_FOB_clp_jt), by(ID_PRODUCTO unidad_medida_ijt)

collapse (firstnm) N_ID_PRODUCTO (mean) count_FOB_clp_jtu mean_sh_FOB_clp_jt, by(ID_PRODUCTO unidad_medida_ijt)
gsort N_ID_PRODUCTO -count_FOB_clp_jtu -mean_sh_FOB_clp_jt

collapse (firstnm) ID_PRODUCTO unidad_medida_ijt, by(N_ID_PRODUCTO)
rename ID_PRODUCTO ad_exp_equiv_cpc5_pr_jtu 
rename unidad_medida_ijt ad_exp_equiv_m_unit_ijtu

save "Aduana_Exports_representative_CPC5_unit_v2.dta", replace

use "Aduana_Exports_pre_representative_v2.dta", clear
joinby N_ID_PRODUCTO using "Aduana_Exports_representative_CPC5_unit_v2.dta", ///
unmatched(master) _merge(merge) update

egen aux_f3_equiv_m_unit_ijt=mode(ad_exp_equiv_m_unit_ijtu), by(N_ID_PRODUCTO)
replace ad_exp_equiv_m_unit_ijtu=aux_f3_equiv_m_unit_ijt
drop aux_f3_equiv_m_unit_ijt
egen aux_f3_equiv_cpc5_pr=mean(ad_exp_equiv_cpc5_pr_jtu), by(N_ID_PRODUCTO)
replace ad_exp_equiv_cpc5_pr_jtu=aux_f3_equiv_cpc5_pr
drop aux_f3_equiv_cpc5_pr

replace ad_exp_equiv_m_unit_ijtu="Invalid" if ad_exp_equiv_m_unit_ijtu==""
replace ad_exp_equiv_cpc5_pr_jtu=. if ad_exp_equiv_m_unit_ijtu=="Invalid"

egen FOB_clp_jtu=total(FOB_clp), by(ID_PRODUCTO AÃ±o unidad_medida_ijt)
egen Cantidad_Mercancia_jtu=total(Cantidad_Mercancia), by(ID_PRODUCTO AÃ±o unidad_medida_ijt)

generate FOB_clp_unit_price=FOB_clp_jtu/Cantidad_Mercancia_jtu
gen ad_exp_equiv_unit_price=FOB_clp_unit_price if ID_PRODUCTO==ad_exp_equiv_cpc5_pr_jtu  & ///
 unidad_medida_ijt==ad_exp_equiv_m_unit_ijtu
 
egen aux=mean(ad_exp_equiv_unit_price), by(N_ID_PRODUCTO AÃ±o)
replace ad_exp_equiv_unit_price=aux
drop aux
generate ratio_unit_price=FOB_clp_unit_price/ad_exp_equiv_unit_price

generate ad_q_equiv_exp_ijt= Cantidad_Mercancia*ratio_unit_price

drop ratio_unit_price FOB_clp_unit_price ad_exp_equiv_unit_price

************************ by country
	foreach y of local country_code {
	generate ad_q_equiv_exp_ijtu_`y'=(q_fob_x_ijtu_`y'/Cantidad_Mercancia)*ad_q_equiv_exp_ijt
	label variable ad_q_equiv_exp_ijtu_`y' "Exported quantity of Equivalent Units to `y' (Customs office)"
	}

save "Aduana_Exports_CPC5_v2.dta", replace

*****************************************************************************************
*****************************************************************************************

collapse (firstnm) CIIU3_3D f3_equiv_m_unit_ijt f3_equiv_cpc5_pr_jt ad_exp_equiv_cpc5_pr_jtu ad_exp_equiv_m_unit_ijtu ///
 (sum) fob_x_ijtu_* q_fob_x_ijtu_* ad_q_equiv_exp_ijtu_* ///
 fob_x_ijtu=FOB_clp ///
 medida_item_ijtu=Cantidad_Mercancia ad_q_equiv_exp_ijt, by(ID_FIRMA AÃ±o N_ID_PRODUCTO unidad_medida_ijt) fast

replace medida_item_ijtu=. if unidad_medida_ijt=="Invalid"
replace unidad_medida_ijt="Missing" if unidad_medida_ijt=="."
replace unidad_medida_ijt="Missing" if unidad_medida_ijt==""
replace medida_item_ijtu=. if unidad_medida_ijt=="Missing"
replace unidad_medida_ijt="Invalid" if unidad_medida_ijt=="Missing"
replace medida_item_ijtu=. if unidad_medida_ijt=="0" /* without unit */

replace ad_q_equiv_exp_ijt=. if ad_exp_equiv_m_unit_ijtu=="Invalid"
replace ad_exp_equiv_m_unit_ijtu="Missing" if ad_exp_equiv_m_unit_ijtu=="."
replace ad_exp_equiv_m_unit_ijtu="Missing" if ad_exp_equiv_m_unit_ijtu==""
replace ad_q_equiv_exp_ijt=. if ad_exp_equiv_m_unit_ijtu=="Missing"
replace ad_exp_equiv_m_unit_ijtu="Invalid" if ad_exp_equiv_m_unit_ijtu=="Missing"
replace ad_q_equiv_exp_ijt=. if ad_exp_equiv_m_unit_ijtu=="0" /* without unit */
foreach y of local country_code {
	replace ad_q_equiv_exp_ijtu_`y'=. if ad_exp_equiv_m_unit_ijtu=="Invalid"
	replace ad_q_equiv_exp_ijtu_`y'=. if ad_exp_equiv_m_unit_ijtu=="Missing"
	replace ad_q_equiv_exp_ijtu_`y'=. if ad_exp_equiv_m_unit_ijtu=="0" /* without unit */
	}

sort ID_FIRMA AÃ±o N_ID_PRODUCTO
rename AÃ±o AÃ‘O

label variable N_ID_PRODUCTO "Fake CPC code, 3 digits"
label variable fob_x_ijtu "FOB (Thousands $) (Customs office)"
rename unidad_medida_ijt measu_unit_ijt
label variable measu_unit_ijt "Measuring unit (Customs office)"
replace measu_unit_ijt="kgr" if measu_unit_ijt =="6"
replace measu_unit_ijt="litre" if measu_unit_ijt =="9"
replace measu_unit_ijt="unit" if measu_unit_ijt =="10"
replace measu_unit_ijt="w/o unit" if measu_unit_ijt =="0"
replace measu_unit_ijt="gross metric tonne" if measu_unit_ijt =="1"
replace measu_unit_ijt="set" if measu_unit_ijt =="12"
replace measu_unit_ijt="m" if measu_unit_ijt =="14"
replace measu_unit_ijt="m2" if measu_unit_ijt =="15"
replace measu_unit_ijt="pair" if measu_unit_ijt =="17"
replace measu_unit_ijt="net kgr fine content" if measu_unit_ijt =="18"
replace measu_unit_ijt="carton" if measu_unit_ijt =="19"
replace measu_unit_ijt="m2 per mm" if measu_unit_ijt =="24"
replace measu_unit_ijt="carat" if measu_unit_ijt =="5"

replace ad_exp_equiv_m_unit_ijtu="kgr" if ad_exp_equiv_m_unit_ijtu =="6"
replace ad_exp_equiv_m_unit_ijtu="litre" if ad_exp_equiv_m_unit_ijtu =="9"
replace ad_exp_equiv_m_unit_ijtu="unit" if ad_exp_equiv_m_unit_ijtu =="10"
replace ad_exp_equiv_m_unit_ijtu="w/o unit" if ad_exp_equiv_m_unit_ijtu =="0"
replace ad_exp_equiv_m_unit_ijtu="gross metric tonne" if ad_exp_equiv_m_unit_ijtu =="1"
replace ad_exp_equiv_m_unit_ijtu="set" if ad_exp_equiv_m_unit_ijtu =="12"
replace ad_exp_equiv_m_unit_ijtu="m" if ad_exp_equiv_m_unit_ijtu =="14"
replace ad_exp_equiv_m_unit_ijtu="m2" if ad_exp_equiv_m_unit_ijtu =="15"
replace ad_exp_equiv_m_unit_ijtu="pair" if ad_exp_equiv_m_unit_ijtu =="17"
replace ad_exp_equiv_m_unit_ijtu="net kgr fine content" if ad_exp_equiv_m_unit_ijtu =="18"
replace ad_exp_equiv_m_unit_ijtu="carton" if ad_exp_equiv_m_unit_ijtu =="19"
replace ad_exp_equiv_m_unit_ijtu="m2 per mm" if ad_exp_equiv_m_unit_ijtu =="24"
replace ad_exp_equiv_m_unit_ijtu="carat" if ad_exp_equiv_m_unit_ijtu =="5"

replace f3_equiv_m_unit_ijt="kgr" if f3_equiv_m_unit_ijt =="6"
replace f3_equiv_m_unit_ijt="litre" if f3_equiv_m_unit_ijt =="9"
replace f3_equiv_m_unit_ijt="unit" if f3_equiv_m_unit_ijt =="10"
replace f3_equiv_m_unit_ijt="w/o unit" if f3_equiv_m_unit_ijt =="0"
replace f3_equiv_m_unit_ijt="gross metric tonne" if f3_equiv_m_unit_ijt =="1"
replace f3_equiv_m_unit_ijt="set" if f3_equiv_m_unit_ijt =="12"
replace f3_equiv_m_unit_ijt="m" if f3_equiv_m_unit_ijt =="14"
replace f3_equiv_m_unit_ijt="m2" if f3_equiv_m_unit_ijt =="15"
replace f3_equiv_m_unit_ijt="pair" if f3_equiv_m_unit_ijt =="17"
replace f3_equiv_m_unit_ijt="net kgr fine content" if f3_equiv_m_unit_ijt =="18"
replace f3_equiv_m_unit_ijt="carton" if f3_equiv_m_unit_ijt =="19"
replace f3_equiv_m_unit_ijt="m2 per mm" if f3_equiv_m_unit_ijt =="24"
replace f3_equiv_m_unit_ijt="carat" if f3_equiv_m_unit_ijt =="5"

rename medida_item_ijtu q_fob_x_ijtu
label variable q_fob_x_ijtu "Quantity (Customs office)"

label variable ad_q_equiv_exp_ijt "Exported quantity of Equivalent Units (Customs office)"
rename ad_q_equiv_exp_ijt ad_q_equiv_exp_ijtu
label variable f3_equiv_m_unit_ijt "Measuring unit of Representative CPC5 Product (ENIA F3)"
rename f3_equiv_m_unit_ijt f3_equiv_m_unit_ijtu 
label variable f3_equiv_cpc5_pr_jt "Representative CPC5 Product (ENIA F3)"
rename f3_equiv_cpc5_pr_jt f3_equiv_cpc5_pr_jtu 
label variable ad_exp_equiv_m_unit_ijtu "Measuring unit of Representative CPC5 Product (Customs office)"
label variable ad_exp_equiv_cpc5_pr_jtu "Representative CPC5 Product (Customs office)"

rename measu_unit_ijt  ad_measu_unit_ijtu
label variable ad_measu_unit_ijtu "Measuring unit (Customs office)"
order ID_FIRMA AÃ‘O CIIU3_3D N_ID_PRODUCTO ad_measu_unit_ijtu fob_x_ijtu q_fob_x_ijtu ad_q_equiv_exp_ijtu ad_exp_equiv_cpc5_pr_jtu ad_exp_equiv_m_unit_ijtu f3_equiv_cpc5_pr_jtu f3_equiv_m_unit_ijtu
sort CIIU3_3D ID_FIRMA AÃ‘O N_ID_PRODUCTO ad_measu_unit_ijtu
rename CIIU3_3D CIIU_Rev3_FIRMA
label variable CIIU_Rev3 "Industry Code of Firm (Dominant Firm's CIIU)"
save "Exports", replace

